package br.uff.javaavancado.dao.impl;

import br.uff.javaavancado.dao.ClienteDAO;
import br.uff.javaavancado.dao.controle.JPAUtil;
import br.uff.javaavancado.dao.generic.JPADaoGenerico;
import br.uff.javaavancado.modelos.Cliente;
import br.uff.javaavancado.modelos.Pedido;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;



public abstract class ClienteDAOImpl  extends JPADaoGenerico<Cliente, Long> implements ClienteDAO{
    
    public ClienteDAOImpl(Class<Cliente> tipo) {
        super(tipo);
    }
    
    public Cliente getClienteComPedidoAberto(Cliente c){
        EntityManager em = JPAUtil.getEntityManager();
        Query namedQuery = em.createQuery("select p from Pedido p left outer join fetch p.itens i where p.cliente.id=? and p.fechado=false");
        namedQuery.setParameter(1, c.getId());
        Pedido p;
        try{
            p = (Pedido) namedQuery.getSingleResult();
        }catch(NoResultException e){
            p = null;
        }
        c.setPedidoAberto(p);
        return c;
    }
    
    
    
//    public Cliente recuperaUmCliente(int id) throws BDException{
//        throw new UnsupportedOperationException("Not supported yet.");
//    }
//    
//    public Cliente recuperaUmCliente(String login, String senha) throws BDException{
//        throw new UnsupportedOperationException("Not supported yet.");
//    }
//    
//    public Cliente recuperaUmCliente(String login) throws BDException{
//        throw new UnsupportedOperationException("Not supported yet.");
//    }
//
//    public List<Cliente> recuperaListaTrack() {
//        throw new UnsupportedOperationException("Not supported yet.");
//    }
//
//    public List<Cliente> recuperaListaTrackSetor(Pedido pedido) {
//        throw new UnsupportedOperationException("Not supported yet.");
//    }
    
}
